Fundamentos de Criptografía

Proceso de transformar información en una forma que los lectores no autorizados no puedan entender.

Se utilizan el mensaje a cifrar (ciphertext) y una llave criptográfica (cipherkey), el cual es un mecanismo que desencripta dicho ciphertext a plaintext (texto legible, plano, normal).

Toda forma de encriptación necesita el cifrado y la llave para asegurar el intercambio de información.

Por ejemplo, una de las formas de encriptación más antigua es el cifrado Cesar (Caesar's cipher), nombrado así por ser el método utilizado por Julio Cesar para comunicarse con sus generales.
Se cifraban mensajes a través de una llave que no era más que mover las letras en un número fijo de espacios.

Por ejemplo, Hola, usando un cifrado cesar de 3, sería Krod, porque se mueven las letras 3 espacios.
Dicho cifrado actualmente es muy débil porque la cantidad de pruebas necesarias para desencriptar un mensaje se limita a la cantidad de letras del abecedario, por lo tanto sólo se necesitan unos ~26 intentos para descifrar el mensaje.

Esta táctica se llama Ataque de fuerza bruta, un proceso donde se prueban -a la fuerza- diferentes combinaciones.

Cifrado simétrico y asimétrico

Existen dos tipos principales de cifrado:


Criptoanálisis

Analizar el proceso de criptografía para mejorar el proceso de encriptación y/o generar nuevas formas de defensa.
La encriptación moderna se basa en su mayoría en la factorización de números primos grandes que son difíciles de calcular manualmente. La misma evolución tecnológica que permite estos algoritmos, también habilita la desencriptación más rápida mediante factorización y ataques de fuerza bruta, incluso botnets pueden ayudar en estos procesos.

Ataques de criptoanálisis

Resultados

Algunos ataques logran la ruptura total de la encriptación, mientras que otros obtienen información que puede ayudar al atacante a causar daños.




PKI

Public key infraestructure - Infraestructura de llaves pública

Se utilizan muchos algoritmos para enviar y almacenar información. Mantener individualmente un manejo de todas estas llaves de encriptación es una tarea imposible para el individuo común. Para esto existe la PKI.

PKI es un framework de encriptación que asegura el intercambio de información online.
Es un proceso de dos pasos el cual comienza con el intercambio de información encriptada.
Esto involucra la encriptación asimétrica, simétrica o ambas.

PKI utiliza ambas encriptaciónes, a veces al mismo tiempo. Depende de si se prioriza la velocidad o la seguridad.
Sin embargo existe una vulnerabilidad común: establecer confianza entre emisor y receptor.
Ambos procesos se basan en compartir llaves que se pueden perder, robar o darles un mal uso.
Es ahí donde el segundo proceso de las PKI entran.
Se mitiga dicha vulnerabilidad al establecer la confiabilidad a través de un sistema de certificados digitales entre los computadores y las redes.





Certificado Digital de seguridad.

Un certificado digital es un archivo que verifica la identidad de quien mantiene una llave pública. La mayoría de la información online se intercambia con estos certificados.
Una forma en que estos certificados se obtienen es cuando se registra un dominio web, quien hace de host envia la información del registrante a una autoridad de certificación. Ahí se provee de una llave pública. La autoridad luego encripta la información con su propia llave privada. Finalmente, se crea el certificado que contiene la información encriptada del registrante. También se incluye la firma digital de autenticidad por parte de la autoridad de certificación.

Una forma de simplificarlo es verlo como tarjetas de identificación online la scuales se usan para restringir o garantizar acceso a la información





Algoritmos

Los más usados:

Simétrico

Asimétrico

Su implementación se solía hacer a través de OpenSSL pero esto ya no es recomendado debido al error Heartbleed en el 2014.
Hoy en día hay diversas formas de implementarlos.

Importante mencionar el principio de Kerchoff. La criptografía debe diseñarse de modo que todos los detalles del algoritmo, excepto la clave privada, pueden ser públicos sin perder su seguridad.





HASH

Algoritmo que produce un código que no puede ser desencriptado.
A diferencia de los algoritmos de cifrado simétricos y asimétricos, este no produce una llave de desencriptación. Lo que produce, es un identificador, conocido como valor hash (Hash value) o digest. Estos, son valores cortos de una longitud fija derivada de una entrada de longitud variable.

La gracia de utilizar Hash es que sirven para determinar la integridad de los archivos y aplicaciones. Esto ya que puedes tener un programa que hace exactamente lo mismo pero basta con que se cambie una linea de código para que el valor hash sea diferente.

La integridad de la información se relaciona con la exactitud y la consistencia de la información. Esto se conoce como no repudio (non-repudiation), el concepto de que la autenticidad de la información no se puede negar.

Las funciones hash son controles de seguridad importantes que ayudan a mantener la integridad de la información.
Una forma de verificar esto es revisar los valores de archivos o aplicaciones y compararlos contra archivos maliciosos conocidos.

En linux podemos usar el CLI para generar el valor hash de cualquier archivo.
REFERIRSE A LOS ARCHIVOS DE LINUX PARA MÁS INFORMACIÓN


El message digest 5 es una de las primeras funciones Hash creadas en los 90.
Originalmente las funciones hash eran utilizadas para encontrar ciertos datos más rápido mediante el uso de una tabla hash, que es una estructura de datos utilizada para almacenar y referenciar valores hash.

Una de las fallas del MD5 es la limitación con el conjunto de salidas. Si bien, las entradas pueden ser infinitas, las salidas son limitadas a una extensión de 32 caracteres. De ahí, aparece un problema llamado colisión de hash, diferentes entradas produciendo el mismo valor hash. Esto, puede ocacionar una duplicidad en la identidad y ser utilizado por atacantes maliciosos para suplantar datos auténticos.

Para evitar el hash colision, se necesitaban valores más largos. De ahí aparecen los algoritmos de hash seguro o SHA.
El NIST es el encargado de aprobar cada uno de estos algoritmos. Junto a cada función SHA se indica el tamaño de su valor en bits, a excepción de SHA-1 que produce 160 bits.
Son seguros a la colisión, pero no invulnerables a otros exploits.

Cinco funciones SHA

SALTING

Protección adicional usada para reforzar las funciones. Básicamente 'le echamos sal' que es una cadena aleatoria de caracteres que se agrega a una entrada durante el proceso.
Esto suele usarse al principio o al final de los datos. Un uso común para este condimentado es el de almacenamiento de contraseñas.